﻿using System.Collections.Generic;
using DimensionsHelper.Common.Contracts.Excel.Options;

namespace DimensionsHelper.Common.Contracts.Excel;

/// <summary>
///     此接口表示用于读取和修改Excel内容及格式的类，可以使用不同的方法实现。
/// </summary>
public interface IExcelWorkbookOperator
{
    /// <summary>
    ///     如果已经使用<see cref="Create(string)" />或<see cref="Open(string)" />方法读取了文件，
    ///     返回<see langword="true" />。
    /// </summary>
    bool IsInitialized { get; }

    /// <summary>
    ///     文档路径，如果没有打开任何文档，返回空字符串
    /// </summary>
    string FileName { get; }

    /// <summary>
    ///     获取或设置超链接文本样式。
    /// </summary>
    FontStyleOptions HyperlinkStyleOptions { get; set; }

    /// <summary>
    ///     获取或设置全局文本样式。
    /// </summary>
    FontStyleOptions GlobalFontStyleOptions { get; set; }

    /// <summary>
    ///     当前工作表中已有的所有工作簿对象。
    /// </summary>
    IList<IExcelWorksheetOperator> Worksheets { get; }

    /// <summary>
    ///     在指定路径创建Excel工作簿，如果文件已存在，将覆盖已有文件。
    /// </summary>
    /// <param name="fileName"></param>
    void Create(string fileName);

    /// <summary>
    ///     打开指定路径的文件，如果不存在，将抛出错误。
    /// </summary>
    /// <param name="fileName"></param>
    void Open(string fileName);

    /// <summary>
    ///     关闭当前文档。
    /// </summary>
    void Close(bool withoutSave = true);

    /// <summary>
    ///     保存当前打开的文档。
    /// </summary>
    void Save(string destination = "");

    /// <summary>
    ///     判断工作簿是否包含指定名称的工作表
    /// </summary>
    /// <param name="sheetName">工作表名称</param>
    bool ContainsWorksheet(string sheetName);

    /// <summary>
    ///     获取指定名称的Excel工作表对象，如果不存在，将创建一个。
    /// </summary>
    /// <param name="sheetName"></param>
    /// <returns></returns>
    IExcelWorksheetOperator GetWorksheet(string sheetName);

    /// <summary>
    ///     移除指定名称的工作表，如果不存在，不会抛出错误。
    /// </summary>
    /// <param name="fileName"></param>
    void DeleteWorksheet(string fileName);
}